perm filename G1TO5[KID,KMC] blob
sn#122899 filedate 1974-11-15 generic text, type T, neo UTF8
TITLE G1TO5
;THE PART OF THE NEW KIDS PROGRAM COMMON TO MANY GAMES.
EXTERNAL MAINLP,ALFBET,DPINIT,PDPGET,CLEAR,SHOW,AIVECT,CHINIT
EXTERNAL LV2,KILL,TYOPTR,TIKCNT,DDRREL,DMDDIR,SPEAK
INTERNAL DOTHNG
X1←6
X2 ← X1+1
X3 ← X2+1
X4 ← X3+1
X5 ← X4+1
X6 ← X5+1
P←17
A←13 ;SAME AS X6
B←14
C←15
LCWP: 0 ;Last Command Wrote on some P.o.g.
FLOOP: 0
DOTHNG: LSHC X1,-1
LSH X2,-=35 ;PRY OFF LOW BIT.
MOVE 0,ALFBET(X1) ;TABLE ENTRY
JUMPN X2,.+2
LSH 0,-=18 ;LEFT HALF OF ENTRY REQUIRED.
HRRZ X2,0
JUMPE X2,MAINLP ;IF NO SEQUENCES FOR THAT CHAR IGNORE IT
;THE LIST OF ALTERNATIVE SEQUENCES IS POINTED AT BY X2
MOVE X3,0(X2) ;NO. OF ALTERNATIVES.
MOVE X4,X2 ;A MOVING POINTER FOR ROTATING.
MOVE X5,1(X4) ;FIRST ENTRY IN LIST
ROTLP: SOSN X3 ;FEWER ALTERNATIVES LEFT
JRST ROTLPX ;ESCAPE LOOP
AOSE X4 ;MOVE THE POINTER
MOVE X6,1(X4) ;GET SOMETHING OUT OF THIS CELL
MOVEM X5,1(X4) ;BUT REPLACE IT
MOVE X5,X6 ;KEEP LATEST IN X5
JRST ROTLP
ROTLPX: MOVEM X5,1(X2) ;PUT LAST ELT IN 1ST CELL OF LIST
;THE LIST OF ALTERNATIVES IS ROTATED WHEN CONTROL FALLS THRU
;NOW 1ST ALTERNATIVE IS A POINTER TO A BLOCK OF COMMANDS
MOVE X4,1(X2) ;FIRST ALTERNATIVE
CMDLP: MOVE X5,0(X4) ;NEXT COMMAND
MOVE 0,TIKCNT ;NO. OF TIKS BEFORE COMMAND READY
JUMPLE 0,.+4
MOVEI 0,0
CALL [SIXBIT /SLEEP/]
JRST CMDLP
ADDI X4,1 ;BUMP COMMAND POINTER
LSHC X5,-36 ;ISOLATE COMMAND CHARACTER
;X6 CONTAINS ARGUMENT OF THE COMMAND
SUBI X5,41 ;ALL CMDS. ARE LETTERS SO MAKE A ZERO.
JUMPGE X5,.+5 ;NO CODE SHOULD BE < ZERO
MOVEI A,0
MOVEI B,=2561
PUSHJ P,DPINIT ;DPINIT(0,2561)
HALT ;ERROR MESSAGE NOT APPROP. - USE RAID
CAILE X5,22 ;COMMANDS PAST S ARE ILLEGAL.
JRST[ MOVEI A,0
MOVEI B,=2561
PUSHJ P,DPINIT ;DPINIT(0,2561)
HALT ];USE RAID HERE
JRST .+1(X5) ;BRANCH USING FOLOWING JUMP TABLE
JRST CMDA ;SHOW FILE [X6] ON POG1
JRST CMDB ;SHOW FILE [X6] ON POG2
JRST CMDC ;SHOW FILE [X6] ON POG3
JRST CMDD ;SHOW FILE [@X6] ON POG1
JRST CMDE ;SHOW FILE [@X6] ON POG2
JRST CMDF ;SHOW FILE [@X6] ON POG3
JRST CMDG ;SAY FILE [X6]
JRST CMDH ;SAY FILE [@X6]
JRST CMDI ;WAIT [X6] TICKS
JRST CMDJ ;SAY FILE [X6] AND QUIT
JRST CMDK ;SAY FILE [@X6] AND QUIT
JRST CMDL ;SHOW AND SAY FILE [X6]
JRST CMDM ;SHOW AND SAY FILE [@X6]
JRST CMDN ;SHOW AND SAY FILE [X6] AND QUIT
JRST CMDO ;SHOW AND SAY FILE [@X6] AND QUIT
JRST CMDP ;SHOW TEXT [@X6] ON TOP POG2
JRST CMDQ ;SHOW TEXT [@X6] ON CENTER POG2
JRST CMDR ;CLEAR POG[X6]
JRST CMDS ;LAST OF THE COMMANDS.
JRST CMD0 ;DISASTER
JRST CMD0 ;DISASTER
CMD0: MOVEI A,0
MOVEI B,=2561
PUSHJ P,DPINIT ;DPINIT(0,2561)
HALT
CMDA: ;SHOW THE DISPLAY FILE WHOSE NAME IS IN X6 ON P1
MOVE 0,LCWP
JUMPN 0,TIKB
SETOM LCWP ;LATEST COMMAND WROTE A PICTURE
MOVE A,X6 ;S/R EXPECTS FILENAME IN REG A
PUSHJ P,PDPGET ;GET THE DPY FILE
JUMPN A,CMDLP
MOVEI A,1 ; INDICATE P.O.G. 1
PUSHJ P,SHOW
PUSHJ P,CLEAR ;EMPTY THE BUFFER
JRST CMDLP
CMDB: ;SHOW THE DISPLAY FILE WHOSE NAME IS IN X6 ON P2
MOVE 0,LCWP
JUMPN 0,TIKB
SETOM LCWP ;LATEST COMMAND WROTE A PICTURE
MOVE A,X6 ;S/R EXPECTS FILENAME IN REG A
PUSHJ P,PDPGET ;GET THE DPY FILE
JUMPN A,CMDLP
MOVEI A,2 ; INDICATE P.O.G. 2
PUSHJ P,SHOW
PUSHJ P,CLEAR ;EMPTY THE BUFFER
JRST CMDLP
CMDC: ;SHOW THE DISPLAY FILE WHOSE NAME IS IN X6 ON P3
MOVE 0,LCWP
JUMPN 0,TIKB
SETOM LCWP ;LATEST COMMAND WROTE A PICTURE
MOVE A,X6 ;S/R EXPECTS FILENAME IN REG A
PUSHJ P,PDPGET ;GET THE DPY FILE
JUMPN A,CMDLP
MOVEI A,3 ; INDICATE P.O.G. 3
PUSHJ P,SHOW
PUSHJ P,CLEAR ;EMPTY THE BUFFER
JRST CMDLP
CMDD: ;SHOW THE FILE POINTED TO BY X6 ON POG1
LSH X6,-6 ;AN ADDRESS
MOVE X6,0(X6) ;THE 6 CHAR NAME.
JRST CMDA
CMDE: ;SHOW THE FILE POINTED TO BY X6 ON POG2
LSH X6,-6 ;ADDRESS OF A NAME
MOVE X6,0(X6) ;THE ACTUAL NAME
JRST CMDB
CMDF: ;SHOW THE FILE POINTED TO BY X6 ON POG3
LSH X6,-6 ;ADDRESS OF THE NAME
MOVE X6,0(X6) ;THE NAME ITSELF
JRST CMDC
CMDG: ;SAY THE FILE WHOSE NAME IS IN X6
MOVE A,X6 ;FILE NAME
PUSHJ P,DMDDIR
JUMPN A,CMDLP
PUSHJ P,SPEAK
JUMPN A,CMDLP
SETZM LCWP ;LAST COMMAND WAS SOUND
PUSHJ P,CLEAR ;UNBELIEVABLE.
JRST CMDLP ;DO NEXT COMMAND
CMDH: ;SAY THE FILE WHOSE NAME IS POINTED TO BY X6
LSH X6,-6 ;GET ADDRESS IN BOTTOM
MOVE X6,0(X6) ;GET THE FILE NAME
JRST CMDG
CMDI: ;WAIT THE NO. OF TIKS GIVEN IN X6
LSH X6,-6 ;MOVE INTEGER TO BOTTOM OF WORD.
SETZM LCWP ;PRETEND LAST COMMAND WAS SOUND
MOVEM X6,TIKCNT
SUBI X4,1
JRST CMDLP
CMDJ: ;SAME AS CMDG AND THEN QUIT.
MOVEI X4,QUITCD
JRST CMDG
CMDK: ;SAME AS CMDH AND THEN QUIT.
MOVEI X4,QUITCD
JRST CMDH
CMDL: ;SHOW (POG1) AND SAY FILE WHOSE NAME IS IN X6
;IF FLOOP IS ZERO THEN SHOW PIC AND SET FLOOP=-1
MOVE FLOOP
JUMPN CMDL2
SETOM FLOOP
SUBI X4,1
JRST CMDA ;SHOW FILE ON POG1
CMDL2: SETZM FLOOP
JRST CMDG ;SAY FILE.
CMDM: ;SAME AS CMDL EXCEPT ADDRESS OF FILESNAME IS IN X6
LSH X6,-6 ;GET ADDRESS
MOVE X6,0(X6);FILE NAME
JRST CMDL
CMDN: ;SHOW ON POG1, SAY AND QUIT WITH FILE NAME IN X6.
MOVE FLOOP
JUMPN CMDN2
SETOM FLOOP
SUBI X4,1
JRST CMDA ;SHOW THE FILE ON POG1
CMDN2: SETZM FLOOP
MOVEI X4,QUITCD;POINT TO A QUIT ORDER.
JRST CMDG ;SAY FILE.
CMDO: ;SAME AS CMDN EXCEPT FILENAME IS ADDRESSED BY X6
LSH X6,-6
MOVE X6,0(X6);GET FILE NAME
JRST CMDN
CMDP: ;SHOW THE TEXT POINTED TO BY X6 ON THE TOP OF POG2.
MOVE 0,LCWP
JUMPN 0,TIKB
SETOM LCWP ;LATEST COMMAND WROTE A PICTURE
LSH X6,-6
MOVE X5,X6
PUSHJ P,CLEAR
MOVEI A,-=500
MOVEI B,=500
PUSHJ P,AIVECT ;AIVECT(-500,600)
MOVEI A,0
MOVEI B,0
MOVEI C,46
MOVEI 0,7
DPB 0,[POINT 3,C,27]
PUSHJ P,LV2 ;GVECT(0,0,46,7,0)
MOVEI A,7
MOVEI B,=1000
MOVEI C,-=500
PUSHJ P,CHINIT
PUSHJ P,COPTXT
MOVEI A,2
PUSHJ P,SHOW
JRST CMDLP
CMDQ: ;SHOW THE TEXT POINTED TO BY X6 AT THE MIDDLE OF POG2.
MOVE 0,LCWP
JUMPN 0,TIKB
SETOM LCWP ;LATEST COMMAND WROTE A PICTURE
LSH X6,-6
MOVE X5,X6
PUSHJ P,CLEAR
MOVEI A,-=500
MOVEI B,0
PUSHJ P,AIVECT ;AIVECT(-500,0)
MOVEI A,0
MOVEI B,0
MOVEI C,46
MOVEI 0,7
DPB 0,[POINT 3,C,27]
PUSHJ P,LV2 ;GVECT(0,0,46,7,0)
MOVEI A,7
MOVEI B,=1000
MOVEI C,-=500
PUSHJ P,CHINIT ;CHINIT(7,1000,-500)
PUSHJ P,COPTXT
MOVEI A,2
PUSHJ P,SHOW
JRST CMDLP
CMDR: ;KILL POG WHOSE NUMBER IS GIVEN IN X6
MOVE A,X6
PUSHJ P,KILL
JRST CMDLP
CMDS: ;END OF THIS SEQUENCE OF COMMANDS
MOVE 0,LCWP ;TEST IF TIME MUST RUN OUT
JUMPN 0,TIKA ;JUMP IF LAST COMMAND WROTE ON GLASS
JRST MAINLP ;GET ANOTHER CHARACTER ETC.
TIKA: MOVEI X6,=40
JRST CMDI+1
TIKB: MOVEI X6,=5
JRST CMDI+1
COPTXT: ;THE ASCIZ STRING POINTED TO BY X5 IS FOR DISPLAY
HLL X5,[POINT 7,0]
COP1: ILDB X6,X5
JUMPE X6,COP2
CAIN X6,26 ;TEST FOR A ⊗
JRST COP3
IDPB X6,TYOPTR
JRST COP1
COP2: POPJ P,
COP3: MOVEI X6,15 ;CARRIAGE RETURN
IDPB X6,TYOPTR
MOVEI X6,12 ;LINE FEED
IDPB X6,TYOPTR
JRST COP1
QUITCD: SIXBIT /S/ ;A QUIT COMMAND.
JNAME: SIXBIT /GAME/
SIXBIT /DMP/ ;NO MODE BITS
XWD 7,0 ;GAMES WILL BE 7K PROGRAMS
0 ;ZERO AS PROJECT-PROGRAMMER NAME
END